package com.algorithm.leetcode;

/**
 * 罗马数由七个数字组成：I, V, X, L, C, D，M.
 *
 * Symbol       Value
 * I                 1
 * V                 5
 * X                10
 * L                50
 * C               100
 * D               500
 * M              1000
 *
 * 2可以用II表示，即两个一一起。12写作XII,即X+II。27写作XXVII即XX+V+II.
 *
 * 罗马数一般从左到右由大到小，但是4并不是写作IIII而是IV,因为I写在V前面所以就是V-I等于4.以下是一些可以用的减法法则：
 * - I可以放在V (5)和X (10)前来表示4和9
 * - X可以放在L (50)和C (100)前来表示40和90
 * - C可以放在D (500)和M (1000)前来表示400和900
 *
 * 题目：给出一个罗马数字，将其转换成整型(Integer),罗马数字的范围在1到3099之间。
 */
public class RomanToInteger {

    public static int solution(String s){

        int sum=0;

        //计算的时候会将被减去的数加回来，所以需要减去双倍的数
        if(s.indexOf("IV") != -1){
            sum-=2;
        }
        if(s.indexOf("IX") != -1){
            sum-=2;
        }
        if(s.indexOf("XL") != -1){
            sum-=20;
        }
        if(s.indexOf("XC") != -1){
            sum-=20;
        }
        if(s.indexOf("CD") != -1){
            sum-=200;
        }
        if(s.indexOf("CM") != -1){
            sum-=200;
        }

        char[] nums=s.toCharArray();

        for(int i=0;i<s.length();i++){
            if(nums[i] == 'I'){
                sum+=1;
            }
            if(nums[i] == 'V'){
                sum+=5;
            }
            if(nums[i] == 'X'){
                sum+=10;
            }
            if(nums[i] == 'L'){
                sum+=50;
            }
            if(nums[i] == 'C'){
                sum+=100;
            }
            if(nums[i] == 'D'){
                sum+=500;
            }
            if(nums[i] == 'M'){
                sum+=1000;
            }
        }

        return sum;
    }

    public static void main(String[] args) {

        System.out.println(solution("MMMXCIX"));
    }
}
